# import asyncio
# import time
#
#
# # 特殊的函数
# async def get_request(url):
#     print('正在请求的网址是:', url)
#     time.sleep(2)
#     print('请求网址结束！')
#     return 123
#
#
# # 创建了一个协程对象
# c = get_request('www.1.com')
# # 创建任务对象
# task = asyncio.ensure_future(c)
# # 创建事件循环对象
# loop = asyncio.get_event_loop()
# # 将任务对象装载在loop对象中且启动事件循环对象
# loop.run_until_complete(task)
import numpy as np
import plotly.graph_objects as go

"""
这段代码会生成一个网格，然后针对每个网格点计算其在三维正态分布中的概率密度值。
最后，使用plotly库的曲面图（Surface Plot）来展示概率密度函数的形状。
通过调整grid_size参数可以控制绘制曲面图时的网格精细程度
"""
# 生成数据
mu = np.array([0, 0, 0])  # 均值
sigma = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])  # 协方差矩阵
n = 100  # 数据点数量
x, y, z = np.random.multivariate_normal(mu, sigma, n).T

# 创建网格数据
grid_size = 50
x_range = np.linspace(-3, 3, grid_size)
y_range = np.linspace(-3, 3, grid_size)
X, Y = np.meshgrid(x_range, y_range)
Z = np.zeros((grid_size, grid_size))

# 计算每个网格点上的高度值
for i in range(grid_size):
    for j in range(grid_size):
        point = np.array([X[i, j], Y[i, j], 0])
        Z[i, j] = (1 / (np.sqrt(2 * np.pi) ** 3 * np.linalg.det(sigma))) * \
                  np.exp(-0.5 * np.dot(np.dot(point - mu, np.linalg.inv(sigma)), point - mu))

# 创建曲面图
surface = go.Surface(
    x=x_range,
    y=y_range,
    z=Z,
    colorscale='Viridis',
    contours=dict(
        x=dict(show=True, start=-3, end=3, size=1, color='white', project_x=True),
        y=dict(show=True, start=-3, end=3, size=1, color='white', project_y=True)
    ),
    lighting=dict(ambient=0.8),
)

# 创建布局
layout = go.Layout(
    title='Three-dimensional Normal Distribution',
    scene=dict(
        xaxis_title='X',
        yaxis_title='Y',
        zaxis_title='Probability Density',
    )
)

# 组合数据和布局，并创建图表
fig = go.Figure(data=[surface], layout=layout)

# 显示图表
